package com.example.repoprovider.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.example.repoprovider.model.Repo;
import org.apache.ibatis.annotations.Param;

/**
 * @author Kong
 * @date 2021-8-19 16:58
 */
public interface RepoMapper extends BaseMapper<Repo> {
    /**
     * 扣减库存
     * @param productCode
     * @param count
     * @return
     */
    int decreaseRepo(@Param("productCode") String productCode, @Param("count") Integer count);

    /**
     * 乐观锁获取库存
     * @param productCode
     * @return
     */
    Repo getRepoForUpdate(@Param("productCode")String productCode);
    /**
     * 乐观锁获取库存 Saga
     * @param productCode
     * @return
     */
    Repo getRepoForUpdateSaga(@Param("productCode")String productCode);

    /**
     * 冻结库存
     * @param productCode
     * @param count
     * @return
     */
    int updateRepoFrozen(@Param("productCode")String productCode,@Param("count")Integer count);

    /**
     * 库存扣减
     * @param productCode
     * @param count
     * @return
     */
    int updateFrozenToUsed(@Param("productCode")String productCode,@Param("count")Integer count);

    /**
     * 库存回滚
     * @param productCode
     * @param count
     * @return
     */
    int rollbackFrozen(@Param("productCode")String productCode,@Param("count")Integer count);
}
